package cz.muni.fi.pa165.api;

import cz.muni.fi.pa165.api.dto.ForestDTO;
import cz.muni.fi.pa165.api.dto.ForestVisitDTO;
import cz.muni.fi.pa165.api.dto.PickerDTO;
import java.util.List;

/**
 * ForestVisitService interface provides a set of business methods for
 * manipulation and retrieval of forest visits in form of DTO objects
 *
 * @author Matej Cimbora
 */
public interface ForestVisitService {

    /**
     * Creates a new forest visit
     *
     * @param forestVisitDTO Forest visit to be created
     */
    public void createVisit(ForestVisitDTO forestVisitDTO);

    /**
     * Retrieves forest visit by id
     *
     * @param id Forest visit's id
     * @return DTO object representing forest visit with given id
     */
    public ForestVisitDTO getVisit(Long id);

    /**
     * Removes a forest visit
     *
     * @param forestVisitDTO Forest visit to be removed
     */
    public void removeVisit(ForestVisitDTO forestVisitDTO);

    /**
     * Updates a forest visit
     *
     * @param forestVisitDTO Forest visit to be updated
     */
    public void updateVisit(ForestVisitDTO forestVisitDTO);

    /**
     * Retrieves all existing forest visits
     *
     * @return List of all forest visits
     */
    public List<ForestVisitDTO> retrieveAllVisits();

    /**
     * Retrieves all forest visits by given picker
     *
     * @param pickerDTO Picker to retrieve forest visits by
     * @return List of all forest visits by given picker
     */
    public List<ForestVisitDTO> retrieveVisitsByPicker(PickerDTO pickerDTO);

    /**
     * Retrieves all forest visits of given forest
     *
     * @param forestDTO Forest to retrieve its forest visits
     * @return List of all forest visits of given forest
     */
    public List<ForestVisitDTO> retrieveVisitsByForest(ForestDTO forestDTO);
}
